Many application developers are familiar with developing applications with code and data conveniently located on either a client or a server. For example, traditional web applications involves a fairly simple programming model using a client web browser and web server. In this model, web page developers generally need not address synchronization and other issues that are present in other contexts because each time a web page is retrieved the application is resynchronized with the server.
However, building rich Internet and various other applications often involves a different programming model in which code and data are located in different client and server locations. For example, in many cases there is one version of data on the server and another on the client and a need to copy data back and forth and keep the server and client synchronized with one another. Many applications provide a persistent client that runs for a relatively long period and involves multiple instances of retrieving and updating data. Developing these and other applications can involve having to expressly address potential synchronization and other issues. For example, in many contexts, a developer is required to provide a significant amount of programming code to affirmatively control each event that causes the creation of, requesting of, updating of, and/or deletion of data that is stored at a server or remote location. In some cases, a developer may need to ensure that appropriate data synchronization occurs in the context of, among other things, various events potentially triggering various types of data access from multiple clients accessing the same data on multiple data servers. Developers must also address circumstances in which a given piece of data is displayed and updated at multiple places within an application being developed.